/**
 * 
 */
package com.monkeyboy.search.solr;

import java.util.List;
import java.util.Map;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;

/**
 * 作用：<br>
 * 查询
 * 
 * @author Gavin<br>
 */
public class SolrjQuery {

	/**
	 * 作用：</br>
	 *
	 * @Author Gavin</br>
	 * @param args</br>
	 *        2019年8月11日
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SolrQuery();
	}

	/**
	 * 作用：</br>
	 *
	 * @Author Gavin</br>
	 *         </br>
	 *         2019年8月11日
	 */
	private static void SolrQuery() {
		// TODO Auto-generated method stub
		try {

			// 创建solrClient同时指定超时时间，不指定走默认配置
			HttpSolrClient client = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/article")
					.withConnectionTimeout(10000).build();

			// 查询 关键词 过滤条件
			// 价格排序 分页 开始行 每页数 高亮 默认域 只查询指定域
			SolrQuery solrQuery = new SolrQuery();
			// 关键词
			solrQuery.setQuery("华为");
			// 过滤条件（fq，指定查询的条件，可以指定多个）
			solrQuery.set("fq", "price:[0 TO 5000]");// "price:[10 TO *]"
			solrQuery.set("fq", "locality:中国深圳");// "price:[10 TO *]"
			// 分页
			// solrQuery.setStart(0);
			// solrQuery.setRows(16);
			// 设置默认的查询域
			solrQuery.set("df", "title");
			// 只查询指定域 select id,title,price from 表名（查询出来的结果筛选字段）
			solrQuery.set("fl", "id,title,price");
			// 打开高亮开关
			solrQuery.setHighlight(true);
			// 指定高亮域
			solrQuery.addHighlightField("title");
			// 前缀
			solrQuery.setHighlightSimplePre("<font color='red'>");
			solrQuery.setHighlightSimplePost("</font>");

			// 执行查询
			QueryResponse response = client.query(solrQuery);
			// 文档结果集
			SolrDocumentList docs = response.getResults();
			//获取最高得分（匹配度最高）
			System.err.println("获取最高得分为："+docs.getMaxScore());
			// 获取高亮结果集
			Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
			// Map K id V Map
			// Map K 域名 V List
			// List list.get(0)
			// 总条数
			long numFound = docs.getNumFound();
			System.out.println("numFound:" + numFound);
			// 遍历结果集
			for (SolrDocument doc : docs) {
				System.out.println("id:" + doc.get("id") + "\ttitle:" + doc.get("title"));
				Map<String, List<String>> map = highlighting.get((String) doc.get("id"));
				List<String> list = map.get("title");
				System.out.println(list.get(0));
			}

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

}
